1. Field of the Invention
The invention relates generally to the field of digital data processing systems and more specifically to communications mechanisms for facilitating communications among nodes in a system employing multiple nodes.
2. Description of the Prior Art
In the past, digital data processing systems, or computers, were large and expensive systems including one or only a few central processor units connected to a main memory, mass storage such as disk and tape units, and input/output units such as printers, video display terminals, and telecommunication links. Because of the cost of such systems, they typically supported a number of users, and a significant amount of design effort went into making them faster. However, as more parts of the computers were put onto integrated circuit chips, including entire central processor units, the cost of computers declined dramatically, and so it became cost effective in many applications to devote a single computer to one or only a few users.
A benefit of having all users using a single large computer system is that data and programs may be shared among a number of users. This benefit can also be realized in an environment of smaller computers if they are linked together, for example, to form a distributed system. In a distributed system, the system is controlled by a host computer which provides services to the smaller computers, which are termed "nodes", such as data and program sharing, scheduling of resources such as printers, backup storage, and the like.
A problem arises, however, in facilitating communications among nodes, that is, in allowing nodes to initiate transfers of information, comprising data and programs, to and from other nodes. In the past, information transfers were asymmetric, that is, the host generated commands, which were performed by the nodes, and the nodes generated responses. In such systems, the host maintained a set of queues for each node, each queue including a command queue, a response queue and a message queue. The host loaded commands into the command queue and the node processed each command and inserted a response into the response queue. If the node required service from the host, but not in response to a command, it loaded a message into the message queue. The host received the message and provided the required service. The information was actually transferred in buffers which were unique to each node and not accessible to the other nodes. If a node required an information transfer with another node, the initiating node essentially had to request the host to perform the transfer, which pre-empted the host from performing other operations.